


int main()
{
    // 定义一个 key_t 类型变量用于标识共享内存段
    key_t key = 0;
    // 定义一个 int 类型变量用于存储共享内存段的标识符
    int shmid = 0;
    // 定义一个 int 类型变量用于存储返回值
    int ret = 0;

    // 使用 ftok 函数根据文件路径和项目 ID 生成共享内存的 key
    key = ftok("/home/hua/yanfa15", 1);
    if (key == -1) {
        // 如果 ftok 失败，则输出错误信息并退出程序
        perror("ftok");
        exit(-1);
    }

    // 使用 shmget 函数创建或获取共享内存段
    shmid = shmget(key, 1024, IPC_CREAT | 0600);
    if (shmid == -1) {
        // 如果 shmget 失败，则输出错误信息并退出程序
        perror("shmget");
        exit(-1);
    }

    // 定义一个指向 char 的指针，用于访问共享内存中的数据
    char *str = NULL;

    // 使用 shmat 函数将共享内存段映射到当前进程的地址空间
    str = shmat(shmid, NULL, 0);
    if (str == (void *)-1) {
        // 如果 shmat 失败，则输出错误信息并退出程序
        perror("shmat");
        exit(-1);
    }

    // 将字符串 "dajiahao" 写入共享内存中
    strcpy(str, "dajiahao");

    // 使用 shmdt 函数解除共享内存段与当前进程地址空间的关联
    ret = shmdt(str);
    if (ret == -1) {
        // 如果 shmdt 失败，则输出错误信息并退出程序
        perror("shmdt");
        exit(-1);
    }

    // 等待 5 秒，确保其他可能访问此共享内存的进程有足够的时间读取数据
    sleep(5);

    // 使用 shmctl 函数删除共享内存段
    ret = shmctl(shmid, IPC_RMID, NULL);
    if (ret == -1) {
        // 如果 shmctl 失败，则输出错误信息并退出程序
        perror("shmctl");
        exit(-1);
    }

    // 返回 0 表示程序正常结束
    return 0;
}

